/* 
 * Guarnicao.java
 * 
 * Data de criação: 06/09/2010
 * 
 * O2SOLUTIONS - SOLUÇÕES EM TECNOLOGIA DA INFORMAÇÃO. 
 *
 */
package br.com.o2solutions.siso.integration.entidade;

import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.o2solutions.core.integration.repository.entity.BaseEntity;

/**
 * Classe responsável por
 * 
 * @author Osvaldeir
 * @since 06/09/2010
 * 
 */
@Entity
@Table(name = "TBGUARNICAO")
@SequenceGenerator(name = "SQGUARNICAO", sequenceName = "SQGUARNICAO")
public class Guarnicao extends BaseEntity<Long> {

	private static final long serialVersionUID = 1L;

	private Agente comandante;

	private List<Agente> agentes;

	private Date dataAtividade;

	private ViaturaUnidadeOperacional viaturaUnidade;

	@Id
	@Override
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SQGUARNICAO")
	public Long getId() {
		return super.getId();
	}

	/**
	 * Retorna o(a) comandante.
	 * 
	 * @return Agente
	 */
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "AGENTECOMANDANTEID", nullable = false)
	public Agente getComandante() {
		return comandante;
	}

	/**
	 * Atribui o(a) comandante.
	 * 
	 * @param comandante
	 *            Agente
	 */
	public void setComandante(Agente comandante) {
		this.comandante = comandante;
	}

	/**
	 * Retorna o(a) agentes.
	 * 
	 * @return List<Agente>
	 */
	@ManyToMany(cascade = CascadeType.PERSIST)
	@JoinTable(name = "RLAGENTEGUARNICAO", joinColumns = { @JoinColumn(name = "GUARNICAOID") }, inverseJoinColumns = { @JoinColumn(name = "AGENTEID") })
	public List<Agente> getAgentes() {
		return agentes;
	}

	/**
	 * Atribui o(a) agentes.
	 * 
	 * @param agentes
	 *            List<Agente>
	 */
	public void setAgentes(List<Agente> agentes) {
		this.agentes = agentes;
	}

	/**
	 * Retorna o(a) data.
	 * 
	 * @return Date
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "DATAATIVIDADE", nullable = false)
	public Date getDataAtividade() {
		return dataAtividade;
	}

	/**
	 * Atribui o(a) data.
	 * 
	 * @param data
	 *            Date
	 */
	public void setDataAtividade(Date data) {
		this.dataAtividade = data;
	}

	/**
	 * Retorna o(a) viaturaUnidade.
	 * 
	 * @return ViaturaUnidadeOperacional
	 */
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "VIATURAUNIDADEOPERACIONALID", nullable = true)
	public ViaturaUnidadeOperacional getViaturaUnidade() {
		return viaturaUnidade;
	}

	/**
	 * Atribui o(a) viaturaUnidade.
	 * 
	 * @param viaturaUnidade
	 *            ViaturaUnidadeOperacional
	 */
	public void setViaturaUnidade(ViaturaUnidadeOperacional viaturaUnidade) {
		this.viaturaUnidade = viaturaUnidade;
	}

}
